Interprocess communication, or IPC, is a general term for techniques that allow software processes to exchange information. By exchanging information, software processes cooperate to perform tasks. Functionally, the use of IPC offers a number of advantages over more traditional monolithic programming models. These advantages include ease of implementation, component reusability, and encapsulation of information. This combination of advantages has resulted in the widespread use of IPC.
Over time, IPC techniques have been adapted to meet the demands of increasingly sophisticated programming environments. Many of these adaptations have attempted to make IPC techniques easier for programmers to use. In spite of this evolution, there are still cases where programmers find the use of IPC techniques to be difficult or error prone. One of these cases arises when programmers attempt to use IPC techniques to send and receive structures within processes created using programming languages that do not provide support for structures. In more detail, high-level languages, such as C, C++ or Pascal, typically allow programmers to group data into aggregates known as structures. In practice, programmers typically use structures to compartmentalize or group related data. This allows related data to be manipulated as a single entity. Thus, for example, a structure might include data describing a hardware device, or data describing an employee record. Because structures contain related data, it is natural for cooperating processes to exchange structures using IPC.
Some high-level languages, namely Java, do not allow data to be grouped into structures. As a result, programmers find it difficult to program Java processes to receive and manipulate structures sent by other processes using IPC. The lack of support for structures also makes it difficult to program Java processes to send structures to other processes using IPC. The unfortunate result is that it is difficult to construct systems where Java-based processes cooperate with processes implemented using more traditional languages, such as C or C++. Since heterogeneous systems of this type are often useful, there exists a need for languages, like Java, to send, receive and manipulate structures.